package edu.pe.cayetano.view.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.beanutils.RowSetDynaClass;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import ws.synopsis.frmwrk.common.BResult;
import edu.pe.cayetano.model.bo.CursoBO;
import edu.pe.cayetano.model.bo.PeriodoAcademicoBO;
import edu.pe.cayetano.model.bo.ProgramacionAcademicaBO;
import edu.pe.cayetano.model.to.CursoTO;
import edu.pe.cayetano.model.to.PeriodoAcademicoTO;
import edu.pe.cayetano.model.to.UsuarioTO;
import edu.pe.cayetano.seccd.constantes.ConstantesMensajes;
import edu.pe.cayetano.seccd.constantes.ConstantesSECCD;
import edu.pe.cayetano.seccd.constantes.ConstantesSession;
import edu.pe.cayetano.util.EscribeLog;
import edu.pe.cayetano.util.UtilitarioSession;

public class ProgramacionAcademicaAction extends BaseAction{
	
	private String 			page = ConstantesSECCD.EXITO;

	
	/**
	 * Metodo que lista las programacion academica
	 * */
	public ActionForward listar(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult							ret				= new BResult();
		ProgramacionAcademicaBO			progAcademnBO 	= new ProgramacionAcademicaBO();
		try {
			HttpSession session = request.getSession(false);
			ret = progAcademnBO.listarProgramacionAcademica();
			if(ret.getCode()==0 && ret.getObject()!=null){
				page=ConstantesSECCD.EXITO;
				UtilitarioSession.eliminaParametrosBusquedaGenerico(session);
				UtilitarioSession.seteaParametrosListadoGenerico(session,(RowSetDynaClass)ret.getObject());
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("ProgramacionAcademicaAction","listar",ConstantesSECCD.ERROR,ret.getMessage());
				mostrarMensaje(request,ConstantesMensajes.ERROR_PROGRACADEMICA_LISTAR,new String[0],"home.do","home");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("ProgramacionAcademicaAction","listar",ConstantesSECCD.ERROR,ret.getMessage());
			mostrarMensaje(request,ConstantesMensajes.ERROR_PROGRACADEMICA_LISTAR,new String[0],"home.do","home");
		}
		return mapping.findForward(page);	
	}

	/**
	 * Metodo que lista las programacion academica de un medico
	 * */
	public ActionForward listarMedico(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult							ret				= new BResult();
		ProgramacionAcademicaBO			progAcadeBO 	= new ProgramacionAcademicaBO();
		try {
			HttpSession session = request.getSession(false);
			UsuarioTO	usuarioTO = (UsuarioTO)session.getAttribute(ConstantesSession.USUARIO_LOGEADO);
			ret = progAcadeBO.listarProgramacionAcademicaMedico(((UsuarioTO)session.getAttribute(ConstantesSession.USUARIO_LOGEADO)).getCodigoMedicoDocente());
			if(ret.getCode()==0 && ret.getObject()!=null){
				PeriodoAcademicoBO		periodoBO  = new PeriodoAcademicoBO();
				BResult					retPeriodo = new BResult();
				retPeriodo = periodoBO.getPeriodoAcademicoActivo();
				if(retPeriodo.getCode()==0 && retPeriodo.getObject()!=null){
					page=ConstantesSECCD.EXITO;
					session.setAttribute("periodoAcademicoTO", (PeriodoAcademicoTO)retPeriodo.getObject());
					UtilitarioSession.eliminaParametrosBusquedaGenerico(session);
					UtilitarioSession.seteaParametrosListadoGenerico(session,(RowSetDynaClass)ret.getObject());	
				}else{
					EscribeLog.escribeLog("ProgramacionAcademicaAction","listarProgramacionAcademicaMedico",ConstantesSECCD.ERROR,ret.getMessage());
					mostrarMensaje(request,ConstantesMensajes.ERROR_PROGRACADEMICA_LISTAR,new String[0],"home.do","home");
				}
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("ProgramacionAcademicaAction","listarProgramacionAcademicaMedico",ConstantesSECCD.ERROR,ret.getMessage());
				mostrarMensaje(request,ConstantesMensajes.ERROR_PROGRACADEMICA_LISTAR,new String[0],"home.do","home");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("ProgramacionAcademicaAction","listarProgramacionAcademicaMedico",ConstantesSECCD.ERROR,ret.getMessage());
			mostrarMensaje(request,ConstantesMensajes.ERROR_PROGRACADEMICA_LISTAR,new String[0],"home.do","home");
		}
		return mapping.findForward(page);	
	}
	
	/**
	 * Metodo para visualizar los alumnos matriculados en un curso
	 * */
	public ActionForward verAlumnosxCurso(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
		BResult			retSalida	= new BResult();
		try {
			HttpSession 					session 		= request.getSession(false);
			BResult							ret				= new BResult();
			ProgramacionAcademicaBO			progAcademnBO 	= new ProgramacionAcademicaBO();			
			String							codigoCurso		= request.getParameter("codigo");
			ret	= progAcademnBO.listarAlumnosxCurso(codigoCurso);
			if(ret.getCode()==0 && ret.getObject()!=null){
				CursoBO			cursoBO  = new CursoBO();
				BResult			retCurso = new BResult();
				retCurso = cursoBO.getCurso(codigoCurso);
				if(retCurso.getCode()==0 && retCurso.getObject()!=null){
					page=ConstantesSECCD.EXITO;
					session.setAttribute("cursoTO", (CursoTO)retCurso.getObject());
					UtilitarioSession.eliminaParametrosBusquedaGenerico(session);
					UtilitarioSession.seteaParametrosListadoGenerico(session,(RowSetDynaClass)ret.getObject());	
				}else{
					page=ConstantesSECCD.ERROR;
					EscribeLog.escribeLog("ProgramacionAcademicaAction","verAlumnosxCurso",ConstantesSECCD.ERROR,ret.getMessage());
					mostrarMensaje(request,ConstantesMensajes.ERROR_PROGRACADEMICA_LISTAR,new String[0],"home.do","home");
				}
			}else{
				page=ConstantesSECCD.ERROR;
				EscribeLog.escribeLog("ProgramacionAcademicaAction","verAlumnosxCurso",ConstantesSECCD.ERROR,ret.getMessage());
				mostrarMensaje(request,ConstantesMensajes.ERROR_PROGRACADEMICA_LISTAR,new String[0],"home.do","home");
			}
		}catch (Exception e) {
			page=ConstantesSECCD.ERROR;
			EscribeLog.escribeLog("CursoAction","verAlumnosxCurso",ConstantesSECCD.ERROR,retSalida.getMessage());
			mostrarMensaje(request,ConstantesMensajes.ERROR_CURSOS_ALUMNO_LISTAR,new String[0],"home.do","home");
		}
		return mapping.findForward(page);	
	}
}
